package recursion;

/*
递归调用规则
1.当程序执行到一个方法时，就会开辟一个独立的空间（就是栈）
2.每个空间的数据（局部变量）是独立的。
3.递归必须向退出条件逼近
4.当一个方法执行完毕，或遇到 return ，就返回，遵循谁调用，就将结果返回给谁。

（可简单理解为：
每递归一次就入栈
当满足递归的结束条件后，就依次出栈）

 */
public class RecursionTest {

	public static void main(String[] args) {
		//打印问题
		//test(4);

		int res = factorial(3);
		System.out.println("res = " + res);
	}

	//打印问题
	public static void test(int n) {
		if (n > 2) {
			test(n - 1);
		}
		System.out.println("u = " + n);
	}

	//阶乘问题
	public static int factorial(int n) {
		if (n == 1) {
			return 1;
		} else {
			return factorial(n - 1) * n;
		}
	}
}
